
create role APPLICATION_USER;
grant CREATE SESSION to APPLICATION_USER;
grant APPLICATION_USER to username;


execute DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();

Execute DBMS_RESOURCE_MANAGER.CREATE_PLAN 
(Plan => 'DEVELOPERS', - 
 Comment => 'Programici w bazie testowej');

Execute DBMS_RESOURCE_MANAGER_PRIVS 
(grantee_name => 'Martha', - 
 admin_option => TRUE);


execute DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP 
(Consumer_Group => 'Online_Developers', - 
 Comment => 'Programici pracujcy na bieco');

execute DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE
 (Plan => 'DEVELOPERS', 
  Group_or_subplan => 'Online_developers',
  Comment => 'Programici pracujcy na bieco', 
  Cpu_p1 => 75, 
  Cpu_p2 => 0, 
  Parallel_degree_limit_pl => 12);

execute DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE
 (Plan => 'DEVELOPERS', 
  Group_or_subplan => 'Batch_developers', 
  Comment => 'Programici wykonujcy operacje wsadowe', 
  Cpu_p1 => 25, 
  Cpu_p2 => 0,
  Parallel_degree_limit_pl => 6);

alter system set initial_consumer_group = 'DAYTIME_USERS';

alter system set initial_consumer_group = 'BATCH_USERS';

execute DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
execute DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();


CREATE_STORED_OUTLINES = development

create outline YTD_SALES 
   for category Development
    on
select YEAR_to_Date_Sales
  from SALES
where region = 'SOUTH'
  and period = 1;


alter outline YTD_SALES rebuild;

alter outline YTD_SALES to rename to YTD_SALES_REGION;

alter outline YTD_SALES_REGION change category to DEFAULT;

Execute OUTLN_PKG.DROP_BY_CAT 
  (category_name => 'DEVELOPMENT');


Execute OUTLN_PKG.UPDATE_BY_CAT 
 (old_category_name => 'DEVELOPMENT', -
  new_category_name => 'TEST';

select AVG(NVL(VSIZE(Column1),0)+
       AVG(NVL(VSIZE(Column2),0)+  	
       AVG(NVL(VSIZE(Column3),0)) rednia_dugo_wiersza
from TABLENAME;


analyze table TABLENAME compute statistics;

analyze table TABLENAME estimate statistics;

select Avg_Row_Len
from USER_TABLES
where Table_Name = 'TABLENAME';

analyze table TABLENAME compute statistics;

select Num_Rows,                  /*liczba wierszy*/
       Blocks,                    /*liczba blokw*/
       Num_Rows/Blocks            /*liczba wierszy w bloku*/
 from USER_TABLES
where Table_Name = 'TABLENAME';


select AVG(NVL(VSIZE(Column1),0)+
       AVG(NVL(VSIZE(Column2),0))  rednia_dugo_wiersza
from TABLENAME;


select AVG(NVL(VSIZE(Column1),0))+
       AVG(NVL(VSIZE(Column2),0)) rednia_dugo_wiersza_1
from TABLE1;
select AVG(NVL(VSIZE(Column1),0)) rednia_dugo_wiersza_2
from TABLE2;


select 
    COUNT(DISTINCT(column name))/               /*liczba rekordw w tabeli*/
    COUNT(*) rows_per_key                       /*liczba wartoci klucza klastra*/
from tablename;


select 
   AVG(NVL(VSIZE(cluster key column),0)) rednia_dugo_klucza
from TABLE1;


create type ADDRESS_TY as object
(street   VARCHAR2(50),
 city     VARCHAR2(25),
 state    CHAR(2),
 zip      NUMBER);
/


create table CUSTOMER
(Name 	 VARCHAR2(25),
 Address  ADDRESS_TY);


Insert into CUSTOMER values
('Joe',ADDRESS_TY('My Street', 'Some City', 'ST', 10001));


create table CUSTOMER
(Name 	 VARCHAR2(25),
 Address  ADDRESS_TY);


select Address.Street from CUSTOMER;

select C.Address.Street from CUSTOMER  C;

create table CUSTOMER
(Name        VARCHAR2(25) primary key,
 street      VARCHAR2(50),
 city        VARCHAR2(25),
 state       CHAR(2),
 zip         NUMBER);


create view CUSTOMER_OV (Name, Address) as
select Name,
       ADDRESS_TY(Street, City, State, Zip)
from CUSTOMER;


create or replace type CUSTOMER_TY as object
(Name        VARCHAR2(25), 
 street      VARCHAR2(50),
 city        VARCHAR2(25),
 state       CHAR(2),
 zip         NUMBER);


Create view CUSTOMER_OV of CUSTOMER_TY
  With object OID (Name) as
Select Name, Street, City, Zip
  from CUSTOMER;


create table CUSTOMER_CALL
(Name          VARCHAR2(25),
 Call_Number   NUMBER,
 Call_Date     DATE,
 constraint CUSTOMER_CALL_PK
     primary key (Name, Call_Number),
constraint CUSTOMER_CALL_FK foreign key (Name)
    references CUSTOMER(Name));


Create view CUSTOMER_CALL_OV as
select MAKE_REF(CUSTOMER_OV, Name) Name
       Call_Number,
       Call_Date
from CUSTOMER_CALL; 	


Select DEREF(CCOV.Name)
       from CUSTOMER_CALL_OV CCOV
where Call_Date = Trunc(SysDate);


create type PERSON_TY as object 
(Name     VARCHAR2(25),
 Address  ADDRESS_TY);

create or replace type PERSON_TY as object 
(Name     VARCHAR2(25),
 Address  Dora.ADDRESS_TY);


grant EXECUTE on ADDRESS_TY to George;

create or replace type PERSON_TY as object 
(Name     VARCHAR2(25),
 Address  Dora.ADDRESS_TY);


create table GEORGE_CUSTOMERS
(Customer_ID  VARCHAR2(25),
 Address      Dora.ADDRESS_TY);


insert into GEORGE_CUSTOMERS values
(1, PERSON_TY('SomeNane',
    ADDRESS_TY('StreetValue','CityValue','ST',11111)));


insert into GEORGE_CUSTOMERS values
(1, PERSON_TY('SomeName',
    Dora.ADDRESS_TY('StreetValue','CityValue','ST',11111)));


create synonym ADDRESS_TY for Dora.ADDRESS_TY;

create type PERSON_TY as object 
(Name     VARCHAR2(25),
 Address  ADDRESS_TY);


create table GEORGE_CUSTOMERS
(Customer_ID    NUMBER,
 Person         PERSON_TY);


select C.Customer_ID, C.Person.Name
from GEORGE_CUSTOMERS C;


select C.Person.Name,
       C.Person.Address.City
from   GEORGE_CUSTOMERS C
where  C.Person.Address.City like 'C%';


create index I_GEORGE_CUSTOMERS$CITY
on GEORGE_CUSTOMERS(Person.Address.City);


alter table TABLE1 drop column Col2;

alter table TABLE1 set unused column Col2;

alter table Table1 drop unused columns;

alter table TABLE1 drop (Col4, col5);

